package com.yunpeng.aidevice.common.enums;

import com.yunpeng.common.enums.ResultCodeEnumInterface;

/**
 * ResultCodeEnum
 *
 * @author : Moore(hemw)
 * @date : 2020-03-12
 */
public enum ResultCodeEnum implements ResultCodeEnumInterface {

    //region 系统异常
    /**
     * 失败
     */
    FAIL("失败", 400),
    /**
     * 用户未登录
     */
    USER_NO_LOGIN("用户未登录", 401),
    /**
     * 未知请求
     */
    UNKNOWN_REQUEST("未知请求！", 402),
    /**
     * 非法访问异常
     */
    ILLEGAL_ACCESS("非法访问！", 403),
    /**
     * 不存在的目标
     */
    INVOCATION_TARGET("不存在的目标！", 404),
    /**
     * 过多的请求次数
     */
    MUCH_REQUEST_TIMES("过多的请求次数，请稍等一分钟重试！", 405),
    /**
     * 用户登录失败
     */
    USER_LOGIN_FAILED("用户登录失败", 406),

    /**
     * 执行http请求异常
     */
    HTTP_REQUEST_EXECUTE_ERROR("执行http请求发生错误！", 407),

    /**
     * 获取http返回结果发生错误
     */
    GET_HTTP_RESPONSE_ERROR("获取http返回结果发生错误！", 408),
    /**
     * 密码错误
     */
    PASSWORD_ERROR("密码错误", 409),
    /**
     * 锁被使用中
     */
    LOCK_IN_USE("锁被使用中", 410),
    //endregion


    //region 业务异常
    /**
     * 数据访问异常，请稍后重试！
     */
    DATA_ACCESS_FAIL("数据访问异常，请稍后重试！", 501),
    /**
     * 应用不存在此功能，请联系客服！
     */
    NO_SUCH_METHOD_FAIL("应用不存在此功能，请联系客服！", 502),
    /**
     * 字段校验不通过
     */
    PARAMETER_CHECK_FAILED("字段校验不通过", 503),
    /**
     * 数据保存失败
     */
    SAVE_DATA_FAILED("数据保存失败", 504),
    /**
     * 数据不存在
     */
    NOT_EXISTS_DATA_FAILED("数据不存在", 505),
    /**
     * 数据域不存在
     */
    NOT_EXISTS_DATA_DOMAIN("数据域不存在", 506),
    /**
     * 数据组不存在
     */
    NOT_EXISTS_DATA_GROUP("数据组不存在", 507),
    /**
     * 数据名称不存在
     */
    NOT_EXISTS_DATA_NAME("数据名称不存在", 508),
    /**
     * 数据键不存在
     */
    NOT_EXISTS_DATA_KEY("数据键不存在", 509),
    /**
     * 数据类型不匹配
     */
    DATA_TYPE_ERROR("数据类型不匹配", 510),

    /**
     * 设备未建立有效连接
     */
    DEVICE_UN_CONN("设备未建立有效连接", 511),

    /**
     * 无权操作
     */
    HAS_NOT_PERMISSION("无权操作", 512),

    /**
     * 未绑定数据
     */
    HAS_NOT_DATA_BIND("未绑定数据", 513),

    /**
     * 删除失败
     */
    REMOVE_FAILED("删除失败", 514),
    /**
     * 数据已存在
     */
    EXISTS_DATA_FAILED("数据已存在", 515),
    /**
     * 数据编号已存在
     */
    EXISTS_NUMBER_FAILED("数据编号已存在", 516),
    /**
     * 存在未禁用的下级节点
     */
    EXISTS_ENABLED_SUB_FAILED("存在未禁用的下级节点", 517),
    /**
     * 缺少组织信息
     */
    LACK_ORG_FAILED("缺少组织信息", 518),
    /**
     * 缺少用户人脸照片，无法启用
     */
    LACK_FACE_IMG_FAILED("缺少用户人脸照片，无法启用", 519),
    /**
     * 缺少设备标识
     */
    LACK_DEVICE_ID_FAILED("缺少设备标识", 520),
    /**
     * 此设备标识已存在
     */
    EXISTS_DEVICE_ID_FAILED("此设备标识已存在", 521),
    /**
     * 手机号码已存在
     */
    EXISTS_PHONE_NUMBER_FAILED("手机号码已存在", 522),
    /**
     * 商户已失效
     */
    DISABLED_MERCHANT("商户已失效", 523),
    /**
     * 已过服务期
     */
    MERCHANT_OVER_INVALID_DATE("已过服务期", 524),
    //endregion

    //region 微信异常
    /**
     * 用户未绑定
     */
    USER_NOT_BIND("用户未绑定", 600),
    //endregion

    /**
     * 成功
     */
    SUCCESS("成功", 200, true),

    /**
     * 未知状态
     */
    UNKNOWN("未知状态", 0);

    /**
     * 枚举值
     */
    private String label;

    /**
     * 枚举数值
     */
    private int value;

    /**
     * 是否成功状态
     */
    private Boolean isSuccess;

    ResultCodeEnum(String label, int value) {
        this.label = label;
        this.value = value;
        this.isSuccess = false;
    }

    ResultCodeEnum(String label, int value, Boolean isSuccess) {
        this.label = label;
        this.value = value;
        this.isSuccess = isSuccess;
    }

    @Override
    public String getLabel() {
        return label;
    }

    @Override
    public int getValue() {
        return value;
    }

    @Override
    public Boolean success() {
        return isSuccess;
    }

    /**
     * 根据传入的value获取对应枚举
     *
     * @param value
     * @return
     */
    public static ResultCodeEnum getEnumByValue(Integer value) {
        if (value != null) {
            for (ResultCodeEnum tmp : values()) {
                if (value == tmp.value) {
                    return tmp;
                }
            }
        }
        return UNKNOWN;
    }
}
